home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagn_r.zip / NUMBERS.SWG / 0052_Random Numbers.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  1KB  |  70 lines

  1. {
  2.  HG> Did any one have an algorithm to generate random numbers?
  3.  HG> I know Borland Pascal have de function RANDOM but what I realy
  4.  HG> want is the code to do that. Any Language is ok, but I prefer
  5.  HG> Pascal.
  6.  
  7.  Here's a small random number unit that is quite good..
  8. }
  9.  
  10. unit Random;
  11.  
  12. interface
  13.  
  14. procedure SeedRandomNum(ASeed : word);
  15. procedure InitRandom;
  16. function  RandomNum : word;
  17. function  RandomRange(ARange : word): word;
  18.  
  19. implementation
  20.  
  21. var
  22.    Fib   : array[1..17] of word;
  23.    i, j  : word;
  24.  
  25. procedure SeedRandomNum(ASeed : word);
  26. var x : word;
  27. begin
  28.    Fib[1] := ASeed;
  29.    Fib[2] := ASeed;
  30.    for x := 3 to 17 do
  31.       Fib[x] := Fib[x-2] + Fib[x-1];
  32.    i := 17;
  33.    j := ASeed mod 17;
  34. end;
  35.  
  36. procedure InitRandom;
  37. begin
  38.    SeedRandomNum(MemW[$40:$6C]);
  39. end;
  40.  
  41. procedure SeedRandom(ASeed : word);
  42. var x : word;
  43. begin
  44.    Fib[1] := ASeed;
  45.    Fib[2] := ASeed;
  46.    for x := 3 to 17 do
  47.       Fib[x] := Fib[x-2] + Fib[x-1];
  48.    i := 17;
  49.    j := ASeed mod 17;
  50. end;
  51.  
  52. function RandomNum : word;
  53. var k : word;
  54. begin
  55.    k := Fib[i] + Fib[j];
  56.    Fib[i] := k;
  57.    dec(i);
  58.    dec(j);
  59.    if i = 0 then i := 17;
  60.    if j = 0 then j := 17;
  61.    RandomNum := k;
  62. end;
  63.  
  64. function RandomRange(ARange : word): word;
  65. begin
  66.    RandomRange := RandomNum mod ARange;
  67. end;
  68.  
  69. end.
  70.